<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets">
  
  <!-- This is the start (home) page of the application. It just displays
  a message. Not very exciting... improvement is possible. -->
  <h:head>
    <title>IGNORED</title>
  </h:head>
  <h:body>
    <ui:composition template="/templates/stud_layout.xhtml">
      <ui:define name="content">
          <h2 id="modulkrit_top">#{strings.modulkrit_h1}</h2>
          
          
          <p>#{strings.modulkrit_p1}</p>
          <a href="#Modul_1">Modul 1</a>
          <a href="#Modul_2">Modul 2</a>
          <a href="#Modul_3">Modul 3</a>
          <a href="#Modul_4">Modul 4</a>
          <a href="#Modul_5">Modul 5</a>
          <a href="#Modul_6">Modul 6</a>
          <br/>
          <a href="#Modul_7">Modul 7</a>
          <a href="#Modul_8">Modul 8</a>
          <a href="#Modul_9">Modul 9</a>
          <a href="#Modul_10">Modul 10</a>
          <a href="#Modul_11">Modul 11</a>
          <a href="#Modul_12">Modul 12</a>
          
          <br/><br/>
          
          
          
          <div id="content">
           
            <h:form> 
                <h1 id="Modul_1"><b>Modul 1: BlueJ, Klasser og Objekter</b></h1>

            I denne modulen skal du først og fremst lære å bruke verktøyene du skal bruke i resten av kurset. <br />
            I tillegg skal du begynne å lære litt om objektorientert programmering og java.

            <h2><b>Læringsmål:</b></h2>

            Du har fullført modulen når du kan: <br /><br />

            Bruke BlueJ, bl.a. til å: <br />
            <div id="indent">åpne, lagre, og lukke prosjekter. <br />
            lage objekter <br />
            kalle metoder i objektene, med og uten parametere <br />
            bruke editoren til å se på kildekoden til en klasse <br />
            kunne kompilere prosjektet </div><br />
            Litt java, du skal f.eks. <br />
            <div id="indent">kunne kjenne igjen en klassedefinisjon, og kunne finne navnet på klassen <br />
            kjenne til forskjellige typer data <br />
            kalle metoder med et objekt som parameter <br />
            kalle metoder som returnerer en verdi <br />
            kjenne forskjellen mellom klasser og objekter </div><br />

            <h2><b>Ressurser:</b></h2>

            <b>Læreboka:</b>	Chap. 1 <br />
            <b>Prosjekter:</b>	figures, house, lab-classes <br /><br />
            <h:commandButton value="Tilbake" action="moduler"></h:commandButton>
            <h:commandButton value="Til toppen" action="#modulkrit_top"></h:commandButton>
            <br /><br />

				
                <h1 id="Modul_2"><b>Modul 2: Klassedefinisjoner</b></h1>

            I denne modulen skal du lære å lese java klassedefinisjoner. <br />
            Java programmer består av klasser, så du skal egentlig lære å lese javaprogrammer. <br />
            Du skal også få prøve å skrive enkle programmer, men akkurat som når du skal lære andre språk, må du lære å lese før du kan begynne å skrive. <br />
            I tillegg skal du begynne å lære litt om objektorientert programmering og java.

            <h2><b>Læringsmål:</b></h2>

            Du har fullført modulen når du: <br /><br />

            Kan lese en klassedefinisjon, og kunne fortelle: <br />
            <div id="indent">hva klassen heter <br />
            hvilke felt den har, hva de heter og hvilken type de har <br />
            hvilke metoder den har, og hva metodene heter <br />
            beskrive parametere (med navn og type) og returverdi for alle metodene </div><br />
            Kjenner forskjellen på forskjellige slags metoder (constructors, acessors/getters, mutators/setters) og vet hva de brukes til <br />
            Kan skrive en klassedefinisjon <br />
            <div id="indent">med felt og metoder i riktig rekkefølge <br />
            med metoder som bruker tilordning, if-setninger og utskrifter </div><br />

            <h2><b>Ressurser:</b></h2>

            <b>Læreboka:</b>	Chap. 2 <br />
            <b>Prosjekter:</b>	naive-ticket-machine, better-ticket-machine, book-exercise <br /><br />
            <h:commandButton value="Tilbake" action="moduler"></h:commandButton>
            <h:commandButton value="Til toppen" action="#modulkrit_top"></h:commandButton>
            <br /><br />
				
				
		<h1 id="Modul_3"><b>Modul 3: Flere objekter</b></h1>

            Virkelige bruksområder for programmer er nesten alltid så kompliserte at programmene ikke kan skrives som en klasse. <br />
            Den ville bli for komplisert. I denne modulen skal du lære om hvordan du kan bruke flere klasser og objekter i samme program. <br />
            Du skal også lære litt om hvordan vi bruker klasser til å bryte ned store problemer i mindre og enklere delproblemer.

            <h2><b>Læringsmål:</b></h2>

            Du har fullført modulen når du: <br /><br />

            kan forklare hva som menes med abstraksjon og modularisering <br />
            kan bruke debuggeren i BlueJ <br />
            har lært litt mer java, og kan: <br />
            <div id="indent">forklare forskjellen på primitive typer og objekttyper <br />
            kan skrive kode som lager nye objekter <br />
            kan skrive kode som kaller metoder i samme objekt, og i andre objekter <br />
            kan tegne klassediagrammer og objektdiagrammer </div><br />

            <h2><b>Ressurser:</b></h2>

            <b>Læreboka:</b>	Chap. 3 <br />
            <b>Prosjekter:</b>	clock-display, clock-display-with-GUI, mail-system <br /><br />
            <h:commandButton value="Tilbake" action="moduler"></h:commandButton>
            <h:commandButton value="Til toppen" action="#modulkrit_top"></h:commandButton>
            <br/><br />

				
		<h1 id="Modul_4"><b>Modul 4: Samlinger av objekter og løkker</b></h1>

            I de fleste systemer har vi mange objekter av samme type. <br />
            Det er f.eks. mange studentobjekter og mange innleveringsobjekter i fronter. <br />
            I denne modulen skal du lære å handtere mange objekter av samme type.

            <h2><b>Læringsmål:</b></h2>

            Du har fullført modulen når du: <br /><br />

            vet når du trenger samlinger av objekter <br />
            kan bruke klassen ArrayList <br />
            <div id="indent">kan gjøre rede for de viktigste metodene i ArrayList <br />
            vet hvordan du spesifiserer hvilken type objekter ei liste kan inneholde <br />
            kan skrive metoder som setter inn, finner og fjerner objekter i ei liste </div><br />
            kan bruke for-each løkker til å gå gjennom ei liste <br />
            kan bruke while-løkker og iteratorer til å gå gjennom ei løkke <br />
            vet hva en array er, og når det er fornuftig å bruke array <br />
            vet om standardbibliotektet <br />
            vet hvorfor vi bruker import-setninger <br />

            <h2><b>Ressurser:</b></h2>

            <b>Læreboka:</b>	Chap. 4 <br />
            <b>Prosjekter:</b>	auction, club, music-organizer-v1, music-organizer-v2, music-organizer-v3, music-organizer-v4, music-organizer-v5, products, weblog-analyzer <br /><br />
            <h:commandButton value="Tilbake" action="moduler"></h:commandButton>
            <h:commandButton value="Til toppen" action="#modulkrit_top"></h:commandButton>
            <br /><br />

				
		<h1 id="Modul_5"><b>Modul 5: Designprosessen</b></h1>

            Det er ikke så vanskelig å lære språket java. Du kan pugge det meste. <br />
            Det som er vanskelig er å finne ut hvilke klasser du trenger, og hvilke felt og metoder disse klassene skal ha. <br />
            <br />
            I denne modulen skal du lære en teknikk for å finne ut dette. Denne jobben blir ofte kalt detaljdesign.

            <h2><b>Læringsmål:</b></h2>

            Du har fullført modulen når du: <br /><br />

            kan kan bruke verb/substantiv metoden til å finne ut <br />
            <div id="indent">hvilke klasser du trenger for å løse et problem <br />
            og hvilke metoder klassene skal ha </div><br />
            kan bruke scenarier (evt. med CRC kort) til å sjekke at du har funnet klassene og metodene du trenger <br />
            vet hva et design pattern er

            <h2><b>Ressurser:</b></h2>

            <b>Læreboka:</b>	Chap. 13 <br />
            <b>Prosjekter:</b>	ingen <br /><br />
            <h:commandButton value="Tilbake" action="moduler"></h:commandButton>
            <h:commandButton value="Til toppen" action="#modulkrit_top"></h:commandButton>
            <br/><br />


            <h1 id="Modul_6"><b>Modul 6: Dokumentasjon</b></h1>
            
            <br/>
            

            Dokumentasjon av programmer er viktig. Dokumentasjonen er nødvendig hvis andre skal bruke klassene du har skrevet, 
            eller når du skal bruke klasser andre har skrevet som f.eks. klassene i standardbiblioteket,
            eller når du skal rette feil i et program du skrev for en stund siden, og ikke husker helt hvordan det er bygd opp. <br />
            <br />    
            I denne modulen skal du lære å skrive dokumentasjon for dine egne klasser, <br />
            og lære å bruke dokuementasjonen til standardbiblioteket i java. <br />
            Du skal også lære å bruke noen nye klasser fra biblioteket.

            <h2><b>Læringsmål:</b></h2>

            Du har fullført modulen når du kan: <br /><br />

            lese og forstå dokumentasjonen for standardbiblioteket <br />
            bruke klasser fra standardbiblioteket <br />
            String, ArrayList, Random, HashMap, Iterator, ... <br />
            skrive dokumentasjon for egne klasser <br />
            bruke public/private <br />
            forklare forskjellen på felt i klassen og klassevariable <br />
            definere konstanter i en klasse

            <h2><b>Ressurser:</b></h2>

            <b>Læreboka:</b>	Chap. 5 <br />
            <b>Prosjekter:</b>	bouncing-balls, tech-support1, tech-support2, tech-support-complete <br /><br />
            <h:commandButton value="Tilbake" action="moduler"></h:commandButton>
            <h:commandButton value="Til toppen" action="#modulkrit_top"></h:commandButton>
            <br/><br />

				
		<h1 id="Modul_7"><b>Modul 7: Designe gode/robuste klasser</b></h1>

            I denne modulen skal du lære mer om design av klasser, spesielt hva som kjennetegner gode og dårlige design. <br />
            Du skal også lære om hvordan du kan forbedre designet til et system uten å forandre funksjonaliteten (refactoring). <br />

            <h2><b>Læringsmål:</b></h2>

            Du har fullført modulen når du: <br /><br />

            kjenner konsekvensene av dårlig design <br />
            <div id="indent">vet hva duplisering av kode er, og hvorfor det ikke er bra <br />
            vet hva 'localizing change' betyr </div><br />
            kjenner betydningen av begrepene kobling (coupling) og sammenheng (cohesion) <br />
            kjenner begrepet innkapsling (encapsulation) og kan bruke det til å redusere kobling <br />
            vet hva refactoring er, og kan bruke refactoring til å forbedre et system <br />

            <h2><b>Ressurser:</b></h2>

            <b>Læreboka:</b>	Chap. 6 <br />
            <b>Prosjekter:</b>	zuul-bad, zuul-better, zuul-with-enums-v1, zuul-with-enums-v2<br /><br />
            <h:commandButton value="Tilbake" action="moduler"></h:commandButton>
            <h:commandButton value="Til toppen" action="#modulkrit_top"></h:commandButton>
            <br/><br />

				
		<h1 id="Modul_8"><b>Modul 8: Testing og debugging</b></h1>

            Hvordan vet vi at systemet virker som det skal? Hvis det ikke gjør det, hvordan kan vi finne feilen. <br />
            Hvis vi ikke vet nøyaktig hva systemet skal gjøre er det håpløst. <br />
            Derfor er det viktig å skaffe seg et godt utgangspunkt ved å gjøre en god jobb med design- og dokumentasjonsprosessen
            du har lært om i de foregående modulene. <br />
            <br />
            Du skal lære å lage enhetstester, som sjekker om hver enkelt klasse gjør det den skal, og å gjøre kodegjennomganger. <br />
            Du skal også lære noen teknikker for å finne feil.

            <h2><b>Læringsmål:</b></h2>

            Du har fullført modulen når du: <br /><br />

            kan lage og kjøre enhetstester i BlueJ <br />
            kan gjennomføre en manuell kodegjennomgang <br />
            kan bruke utskrifter/logging til å finne feil <br />
            kan bruke assert-setninger til å bekrefte at programmeet virker som det skal <br />

            <h2><b>Ressurser:</b></h2>

            <b>Læreboka:</b>	Chap. 7
            <b>Prosjekter:</b>	bricks, calculator-engine, calculator-engine-print, calculator-full-solution, calculator-gui, diary-prototype, online-shop, onlinle-shop-junit- <br /><br />
            <h:commandButton value="Tilbake" action="moduler"></h:commandButton>
            <h:commandButton value="Til toppen" action="#modulkrit_top"></h:commandButton>
            <br/><br />

				
		<h1 id="Modul_9"><b>Modul 9: Arv og subklasser I</b></h1>

            <h2><b>Læringsmål:</b></h2>

            Du har fullført modulen når du: <br /><br />

            kjenner betydningen av begrepene arv, superklasse, subklasse, subtype og substitusjon <br />
            kan lage en subklasse av en annen klasse <br />
            <div id="indent">kan bruke superklassens constructor <br />
            vet hvordan du bruker metoder og felt som er arvet fra superklassen <br />
            vet hvilke variable du kan lagre objekter fra subklassen i </div><br />
            hvet hvordan arv kan brukes til å forenkle gjenbruk av kode <br />
            kjenner til klassen Object, og metodene som blir arvet fra den <br />

            <h2><b>Ressurser:</b></h2>

            <b>Læreboka:</b>	Chap. 8 <br />
            <b>Prosjekter:</b>	network-v1, network-v2 <br /><br />
            <h:commandButton value="Tilbake" action="moduler"></h:commandButton>
            <h:commandButton value="Til toppen" action="#modulkrit_top"></h:commandButton>
            <br /><br />


            <h1 id="Modul_10"><b>Modul 10: Arv og subklasser II</b></h1>

            <h2><b>Læringsmål:</b></h2>

            Du har fullført modulen når du: <br /><br />

            kjenner betydningen av begrepene statisk type, dynamisk type, omdefinering (overriding), polymorfisme <br />
            kan skrive subklasser som omdefinerer metoder fra superklassen <br />
            kan skrive/omdefineres equals() og hashCode() metoder for en klasse <br />

            <h2><b>Ressurser:</b></h2>

            <b>Læreboka:</b>	Chap. 9 <br />
            <b>Prosjekter:</b>	network-v3 <br /><br />
            <h:commandButton value="Tilbake" action="moduler"></h:commandButton>
            <h:commandButton value="Til toppen" action="#modulkrit_top"></h:commandButton>
            <br /><br />


		<h1 id="Modul_11"><b>Modul 11: Abstrakte klasser og interface</b></h1>

            <h2><b>Læringsmål:</b></h2>

            Du har fullført modulen når du: <br /><br />

            kjenner betydningen av begrepene: abstrakt metode, abstratc klasse, multippel arv, interface <br />
            kan skrive konkrete subklasser av abstrakte klasser <br />
            kan skrive klasser som implementer et eller flere interface <br />
            vet hvordan du kan bruke interface som datatype, og som spesifikasjon <br />
            kan skrive abstrakte klasser og interface <br />

            <h2><b>Ressurser:</b></h2>

            <b>Læreboka:</b>	Chap. 10 <br />
            <b>Prosjekter:</b>	foxes-and-rabbits-v1, foxes-and-rabbits-v2, foxes-and-rabbits-graph <br />
            <h:commandButton value="Tilbake" action="moduler"></h:commandButton>
            <h:commandButton value="Til toppen" action="#modulkrit_top"></h:commandButton><br /><br />

				
		<h1 id="Modul_12"><b>Modul 12: Feilhåndtering</b></h1>

            <h2><b>Læringsmål:</b></h2>

            Du har fullført modulen når du: <br /><br />

            kan gjøre rede for hva exceptions representerer, og forskjellen på checked og unchecked exceptions <br />
            kan skrive metoder som kaster exceptions for å flagge feilsituasjoner <br />
            kan bruke metoder som kaster exceptions, og fange opp feilsituasjonene på et egnet sted <br />

            <h2><b>Ressurser:</b></h2>

            <b>Læreboka:</b>	Chap. 12 <br />
            <b>Prosjekter:</b>	mange... <br /><br /><br />
            <h:commandButton value="Tilbake" action="moduler"></h:commandButton>
            <h:commandButton value="Til toppen" action="#modulkrit_top"></h:commandButton>
            </h:form>
        </div>
      </ui:define>
    </ui:composition>     
  </h:body>
</html>